#include "vtkOutputStream.h"
#include "vtkPointData.h"
#include "vtkPoints.h"
+#include "vtkSmartPointer.h"
#include "vtkStdString.h"
#include "vtkStreamingDemandDrivenPipeline.h"
#include "vtkStringFormatter.h"
int vtkXMLWriter::WriteAsciiData(vtkAbstractArray* a, vtkIndent indent)
{
vtkArrayIterator* iter = a->NewIterator();
+ vtkSmartPointer<vtkAbstractArray> copy;
+ if (!iter)
+ {
+ // Arrays which provide no iterator, such as the implicit arrays used since VTK 9.6
+ // for uniform cell types, are written through an explicit copy.
+ copy.TakeReference(vtkAbstractArray::CreateArray(a->GetDataType()));
+ copy->DeepCopy(a);
+ iter = copy->NewIterator();
+ }
ostream& os = *(this->Stream);
int ret;
switch (a->GetDataType())
ret = 0;
break;
}
- iter->Delete();
+ if (iter)
+ {
+ iter->Delete();
+ }
return ret;
}